1. Field of the Invention
The present invention relates in general to computers, and, more particularly, to a system and method of dynamic allocation of non-volatile memory in cache storage subsystems.
2. Description of the Prior Art
A storage subsystem, such as the International Business Machines (IBM®) Enterprise Storage Server (ESS®), will receive Input/Output (I/O) requests directed toward an attached storage system. The attached storage system may comprise an enclosure including numerous interconnected disk drives, such as a Direct Access Storage Device (DASD), Redundant Array of Independent Disks (RAID Array), Just A Bunch of Disks (JBOD), etc. If I/O requests are received at a faster rate than they can be processed, then the storage subsystem will queue the I/O requests in a storage cache, which may comprise one or more gigabytes of volatile storage, e.g., Random Access Memory (RAM), Dynamic Random Access Memory (DRAM), etc. A copy of certain modified (write) data may also be placed in a non-volatile storage unit (NVS), such as a battery-backup volatile memory, to provide additional protection of write data in the event of a failure at the storage subsystem.
An entry is included in a Least Recently Used (LRU) list for each track in cache. A track can be staged from the storage system for cache to return to a read request. Additionally, write data for a track may be stored in cache before being transferred to the attached storage system. When additional space in cache is needed to buffer additional requested read data and modified data, tracks indicated at the LRU end of the LRU list are destaged to disk. An entry is added to the most recently used (MRU) end of the LRU list for each track added to cache. Each entry in the LRU list comprises a control block that indicates the current status of a track, the location in cache, and the location in the storage system. An additional NVS LRU list is maintained for tracks in the NVS. The cache and NVS LRU lists include entries for tracks in both NVS and cache.
In storage subsystems that provide a write cache to enhance performance, a method to persistently store and recover data is required to preserve data integrity during a loss-of-power scenario. If the data are not stored in a persistent manner, then the data in the write cache are lost when power is lost. There is no record of what data were lost during the power outage, so all of the data stored in the subsystem are suspect. The size of the write cache impacts the performance capability of the storage system in that it determines the limits to which write transactions can be processed by the system prior to requiring that the data be destaged to persistent media such as hard disk devices (HDDs).
In some storage subsystems, there are different requirements for the storage of persistent data to support system data recovery during a loss of power sequence and subsequent restoration of power. One such instance might be whether or not certain RAID levels are configured within a particular system. Different RAID levels may require that data from the RAID controller engine be persistently stored to provide recovery from certain failures during a restoration sequence following a loss of power. For those instances where there is a requirement to store additional data persistently in the event of a power loss, it may be required to reduce the size of the write cache in an equivalent amount to the new data that is required to be stored persistently. For cases where the additional data is not required to be stored persistently, it would not be necessary to reduce the size of the write cache.